#ifndef ORDER_H
#define ORDER_H

#include"orderRoleBase.h"
#include"saleBase.h"

//订单
class Order
{
public:
    Order(){
        price=0;
    }

    /*
     * 获取价格
     * */
    double getPrice()
    {
        price=0;
        for(auto k :sales)
            price+=k->getPayable();
        for(auto k:orderRoles)
            price=k->priceAdjustment(sales,price);
        return price;
    }

    /*
     * 添加物品
     * */
    void addFood(SaleBase* sa)
    {
        price+=sa->getPayable();
        sales.push_back(sa);
    }

    /*
     * 添加打折器
     * */
    void addOrderRole(OrderRoleBase* orRol)
    {
        orderRoles.push_back(orRol);
    }

    /*
     * 清楚所有选择的食物
     * */
    void clear()
    {
        sales.clear();
        orderRoles.clear();
        price=0;
    }

    //将订单信息转换为字符串形式保存于数据库中
    string toString()
    {
        string re="### 菜单信息  \n***\n";
        for(auto sb:sales)
            re+=sb->toString()+"  \n***\n";
        re+="### 打折信息  \n***\n";
        for(auto oR:orderRoles)
            re+=oR->toString()+"  \n***\n";
        re+="### 价格："+QString("%1").arg(getPrice()).toStdString()+"  \n***\n";
        return re;
    }



public:
    vector<OrderRoleBase*> orderRoles;//打折详细
    vector<SaleBase*> sales;//购买详细
protected:
    double price;

};

#endif // ORDER_H
